package cn.iocoder.yudao.module.wine.controller.admin.businessuser.vo;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;

import java.time.LocalDate;
import java.time.LocalDateTime;

import com.alibaba.excel.annotation.*;

@Schema(description = "管理后台 - 商家配置 Response VO")
@Data
@ExcelIgnoreUnannotated
public class BusinessUserRespVO {

    @Schema(description = "自增主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "1431")
    @ExcelProperty("自增主键")
    private Long id;

    @Schema(description = "商家类型：0--业务代表，1--法人代表", example = "商家类型：0--业务代表，1--法人代表")
    @ExcelProperty("商家类型：0--业务代表，1--法人代表")
    private Integer businessType;

    @Schema(description = "区域ID", example = "区域ID")
    @ExcelProperty("区域ID")
    private Integer areaId;

    @Schema(description = "上级老板用户ID，0--为老板", example = "上级老板用户ID，0--为老板")
    @ExcelProperty("上级老板用户ID，0--为老板")
    private Long parentId;

    @Schema(description = "当前用户ID", example = "当前用户ID")
    @ExcelProperty("当前用户ID")
    private Long userId;

    @Schema(description = "账号类型：0--老板，1--员工", example = "账号类型：0--老板，1--员工")
    @ExcelProperty("账号类型：0--老板，1--员工")
    private Integer userType;

    @Schema(description = "商家信用等级，关联business_credit表信用等级level值", example = "商家信用等级，关联business_credit表信用等级level值")
    @ExcelProperty("商家信用等级，关联business_credit表信用等级level值")
    private Integer creditId;

    @Schema(description = "信用等级名称", example = "信用等级名称", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("信用等级名称")
    private String creditName;

    @Schema(description = "公司名称", example = "公司名称")
    @ExcelProperty("公司名称")
    private String companyName;

    @Schema(description = "公司地址", example = "公司地址")
    @ExcelProperty("公司地址")
    private String companyAddress;

    @Schema(description = "公司营业执照", example = "公司营业执照")
    @ExcelProperty("公司营业执照")
    private String companyImage;

    @Schema(description = "身份证", example = "身份证")
    @ExcelProperty("身份证")
    private String cardImage;

    @Schema(description = "身份证背面照片", example = "身份证背面照片")
    @ExcelProperty("身份证背面照片")
    private String cardBackImage;

    @Schema(description = "生活合照", example = "生活合照")
    @ExcelProperty("生活合照")
    private String liveImage;

    @Schema(description = "许可证照", example = "许可证照")
    @ExcelProperty("许可证照")
    private String licenseImage;

    @Schema(description = "收货地址", example = "收货地址")
    @ExcelProperty("收货地址")
    private String receiveAddress;

    @Schema(description = "发货地址", example = "发货地址")
    @ExcelProperty("发货地址")
    private String deliveryAddress;

    @Schema(description = "可发布供应条数", example = "可发布供应条数", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("可发布供应条数")
    private Integer supplyNum;

    @Schema(description = "可发布求购条数", example = "可发布求购条数", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("可发布求购条数")
    private Integer buyNum;

    @Schema(description = "可发布投诉条数", example = "可发布投诉条数")
    @ExcelProperty("可发布投诉条数")
    private Integer complainNum;

    @Schema(description = "可发布离职通告条数", example = "可发布离职通告条数")
    @ExcelProperty("可发布离职通告条数")
    private Integer leaveNum;

    @Schema(description = "商家状态：0--刚申请，1--已审核并认证，2--已拒绝", example = "商家状态：0--刚申请，1--已审核并认证，2--已拒绝")
    @ExcelProperty("商家状态：0--刚申请，1--已审核并认证，2--已拒绝")
    private Integer status;

    @Schema(description = "商家认证：0--未认证，1--已认证，2--认证失效", example = "商家认证：0--未认证，1--已认证，2--认证失效")
    @ExcelProperty("商家认证：0--未认证，1--已认证，2--认证失效")
    private Integer isAuth;

    @Schema(description = "是否开启相关功能", example = "是否开启相关功能")
    @ExcelProperty("是否开启相关功能")
    private Integer isOpen;

    @Schema(description = "信用分", example = "信用分")
    @ExcelProperty("信用分")
    private Integer creditScore;;

    @Schema(description = "是否平台自营 1是2否", example = "是否平台自营 1是2否")
    @ExcelProperty("是否平台自营 1是2否")
    private Integer isSelfSupport ;

    /**
     * 保证金内容：5W保证金
     */
    @Schema(description = "保证金内容")
    @ExcelProperty("保证金内容")
    private  String bondName;

    @Schema(description = "创建时间", example = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("创建时间")
    private LocalDateTime createTime;


    @Schema(description = "地区名称", example = "地区名称", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("地区名称")
    private String areaName;

    @Schema(description = "会员类型id", example = "会员类型id", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("会员类型id")
    private Long memberTypeId;

    @Schema(description = "昵称", example = "昵称", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("昵称")
    private String nickname;

    @Schema(description = "用户名", example = "用户名", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("用户名")
    private String username;

    @Schema(description = "认证时间", example = "认证时间")
    @ExcelProperty("认证时间")
    private LocalDateTime authTime;

    @Schema(description = "开通时间", example = "开通时间")
    @ExcelProperty("开通时间")
    private LocalDateTime openTime;

    @Schema(description = "结束时间", example = "结束时间")
    @ExcelProperty("结束时间")
    private LocalDateTime overTime;

    @Schema(description = "关注人数", example = "关注人数", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("关注人数")
    private Long subscribeNum;

    @Schema(description = "粉丝人数", example = "粉丝人数", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("粉丝人数")
    private Long fansNum;

    @Schema(description = "访客人数", example = "访客人数", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("访客人数")
    private Long visitorNum;

    // ========== 数据转换 ==========

    @Schema(description = "开通日期", example = "开通日期", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("开通日期")
    private LocalDate startDate;

    @Schema(description = "过期日期", example = "过期日期", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("过期日期")
    private LocalDate endDate;

    @Schema(description = "开通时间", example = "开通时间", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("开通时间")
    private LocalDateTime startDateTime;

    @Schema(description = "过期时间", example = "过期时间", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("过期时间")
    private LocalDateTime endDateTime;


    // ========== 账号信息 ==========

    @Schema(description = "是否团长", example = "是否团长", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("是否团长")
    private Integer isTeam;

    @Schema(description = "是否商家", example = "是否商家", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("是否商家")
    private Integer IsBusiness;

    @Schema(description = "团长审核状态", example = "团长审核状态", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("团长审核状态")
    private Integer teamAudit;

    @Schema(description = "电话", example = "电话", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("电话")
    private String mobile;

    @Schema(description = "真实姓名", example = "真实姓名", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("真实姓名")
    private String realName;

    @Schema(description = "头像", example = "头像", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("头像")
    private String avatar;

    @Schema(description = "性别", example = "性别", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("性别")
    private String sex;

    @Schema(description = "简介", example = "简介", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("简介")
    private String mark;

    @Schema(description = "收款码", example = "收款码", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("收款码")
    private String moneyReceivingCode;

    @Schema(description = "团长缴费开通时间", example = "开通时间", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("开通时间")
    private LocalDateTime teamOpenTime;

    @Schema(description = "团长缴费过期时间", example = "过期时间", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("过期时间")
    private LocalDateTime teamOverTime;
    /**
     * 团长过期时间：免费过期时间
     */
    @Schema(description = "免费过期时间", example = "免费过期时间")
    private LocalDateTime teamExpirationTime;

    /**
     * 注册 IP
     */
    @Schema(description = "注册 IP", example = "注册 IP")
    private String registerIp;

    /**
     * 最后登录IP
     */
    @Schema(description = "最后登录IP", example = "最后登录IP")
    private String loginIp;
    /**
     * 最后登录时间
     */
    @Schema(description = "最后登录时间", example = "最后登录时间")
    private LocalDateTime loginDate;

    /**
     * 出生日期
     */
    @Schema(description = "出生日期", example = "出生日期")
    private LocalDateTime birthday;

    /**
     * 是否审核  1是 2否
     */
    @Schema(description = "是否审核", example = "是否审核")
    private Integer audit;

    /**
     * 介绍人手机号
     */
    @Schema(description = "介绍人手机号", example = "介绍人手机号")
    private String introducerMobile;

    /**
     * 会员功能模块，逗号隔开
     */
    @Schema(description = "会员功能模块", example = "会员功能模块", requiredMode = Schema.RequiredMode.REQUIRED)
    private String modular;

    /**
     * 系统上线是否开启权限功能
     */
    @Schema(description = "开启权限功能", example = "开启权限功能", requiredMode = Schema.RequiredMode.REQUIRED)
    private Integer isOpenUse;

    /**
     * 关闭时间
     */
    @Schema(description = "关闭时间", example = "关闭时间")
    private LocalDateTime closeTime;

    /**
     * 新商家是否开启体验
     */
    @Schema(description = "新商家是否开启体验", example = "新商家是否开启体验")
    private Integer isOpenMonth;
    /**
     * 新商家开启体验月数
     */
    @Schema(description = "新商家开启体验月数", example = "新商家开启体验月数")
    private Integer freeMonth;
    /**
     * 商家过期时间：免费过期时间
     */
    @Schema(description = "免费过期时间", example = "免费过期时间")
    private LocalDateTime expirationTime;
    /**
     * 所有已结算佣金
     */
    @Schema(description = "所有已结算佣金", example = "所有已结算佣金")
    private Integer allAmount;

    /**
     * 推广员编号
     * <p>
     * 关联 MemberUserDO 的 id 字段
     */
    @Schema(description = "推广员编号")
    private Long bindUserId;

    /**
     * 推广员真实姓名
     */
    @Schema(description = "推广员真实姓名")
    private String bindUserName;

    @Schema(description = "使用权限的真正权限")
    private Integer creditTrueId;
}
